home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.2 Applications 1996 May / SGI IRIX 6.2 Applications 1996 May.iso / dist / impr_dev.idb / usr / impressario / src / libimp / impSwap.c.z / impSwap.c
C/C++ Source or Header  |  1996-05-06  |  3KB  |  116 lines

  1. /**************************************************************************
  2.  *
  3.  *           Copyright (c)    1993 Silicon Graphics, Inc.
  4.  *            All Rights Reserved
  5.  *
  6.  *       THIS    IS UNPUBLISHED PROPRIETARY SOURCE CODE OF SGI
  7.  *
  8.  * The copyright notice above does not evidence any actual of intended
  9.  * publication of such source code, and is an unpublished work by Silicon
  10.  * Graphics, Inc. This material contains CONFIDENTIAL INFORMATION that is
  11.  * the property of Silicon Graphics, Inc. Any use, duplication or
  12.  * disclosure not specifically authorized by Silicon Graphics is strictly
  13.  * prohibited.
  14.  *
  15.  * RESTRICTED RIGHTS LEGEND:
  16.  *
  17.  * Use, duplication or disclosure by the Government is subject to
  18.  * restrictions as set forth in subdivision (c)(1)(ii) of the Rights in
  19.  * Technical Data and Computer Software clause at DFARS 52.227-7013,
  20.  * and/or in similar or successor clauses in the FAR, DOD or NASA FAR
  21.  * Supplement. Unpublished - rights reserved under the Copyright Laws of
  22.  * the United States. Contractor is SILICON GRAPHICS, INC., 2011 N.
  23.  * Shoreline Blvd., Mountain View, CA 94039-7311
  24.  **************************************************************************
  25.  *
  26.  * File: impSwap.c
  27.  *
  28.  * Description: Internal routines for byte swapping.
  29.  *
  30.  **************************************************************************/
  31.  
  32.  
  33. #ident "$Revision: 1.2 $"
  34.  
  35.  
  36. #include <stdio.h>
  37. #include <sys/types.h>
  38. #include "impI.h"
  39.  
  40.  
  41. /**************************************************************************
  42.  *
  43.  * Function: _impSwapHeader
  44.  *
  45.  * Description: Swaps the bytes of the disk archived portion
  46.  *    of the image header. The archived portion is the public 
  47.  *    portion.
  48.  *
  49.  * Parameters: 
  50.  *    image (I) - pointer to an image header
  51.  *
  52.  * Return: none
  53.  *
  54.  **************************************************************************/
  55.  
  56. void _impSwapHeader(IMPImage *image)
  57. {
  58.     _impSwapShorts((ushort_t*)(&image->imagic), 6 * sizeof(ushort_t));
  59.     _impSwapLongs((__uint32_t*)(&image->min), 3 * sizeof(ulong_t));
  60.     _impSwapLongs((__uint32_t*)(&image->colormap), sizeof(ulong_t));
  61. }
  62.  
  63.  
  64. /**************************************************************************
  65.  *
  66.  * Function: _impSwapShorts
  67.  *
  68.  * Description: Swaps the bytes on an array of shorts.
  69.  *
  70.  * Parameters: 
  71.  *    arr (I) - array of shorts whose bytes are to be swapped
  72.  *    nBytes (I) - number of bytes in array (i.e. 2 * narr)
  73.  *
  74.  * Return: none
  75.  *
  76.  **************************************************************************/
  77.  
  78. void _impSwapShorts(register ushort_t *arr, int nBytes)
  79. {
  80.     register int i;
  81.     register int nShorts = nBytes >> 1;
  82.     register ushort_t swd;
  83.  
  84.     for (i = 0; i < nShorts; i++) {
  85.     swd = *arr;
  86.     *arr++ = _impSwapShort(swd);
  87.     }
  88. }
  89.  
  90.  
  91. /**************************************************************************
  92.  *
  93.  * Function: _impSwapLongs
  94.  *
  95.  * Description: Swaps the bytes on an array of longs.
  96.  *
  97.  * Parameters: 
  98.  *    arr (I) - array of longs whose bytes are to be swapped
  99.  *    nBytes (I) - number of bytes in array (i.e. 4 * narr)
  100.  *
  101.  * Return: none
  102.  *
  103.  **************************************************************************/
  104.  
  105. void _impSwapLongs(register __uint32_t *arr, int nBytes)
  106. {
  107.     register int i;
  108.     register int nLongs = nBytes >> 2;
  109.     register __uint32_t lwd;
  110.  
  111.     for (i = 0; i < nLongs; i++) {
  112.     lwd = *arr;
  113.     *arr++ = _impSwapLong(lwd);
  114.     }
  115. }
  116.